#ifndef DECRYPTOR_H
#define DECRYPTOR_H

#include <stdexcept>
#include "context.h"
#include "ring.h"
#include "ring_poly.h"
#include "operand.h"
#include "keygen.h"
/* *
 * @class Decryptor
 * @brief 同态加密解密器，负责对密文进行解密操作。
 *
 * 该类用于实现同态加密中的解密操作，利用私钥将密文解密为明文。它封装了与解密操作相关的各种参数和数据结构。
 */
class Decryptor {
public:
    Context *params;
    Ring *ringQ; // 假设ringQ是ring包中的Ring类
    SecretKey *sk;
    Poly *polyPool; // 假设Poly是ring包中的多项式类

    // 拷贝构造函数
    Decryptor(const Decryptor &) = delete;
    Decryptor &operator = (const Decryptor &) = delete;
    // 移动构造函数
    Decryptor(Decryptor &&other) = delete;
    Decryptor &operator = (Decryptor &&other) = delete;
    // 构造函数
    Decryptor(Context *params, SecretKey *sk);

    // 解密方法，返回新的明文
    Plaintext *DecryptNew(Ciphertext *ciphertext) const;

    // 解密方法，存储到提供的明文中
    void Decrypt(Ciphertext *ciphertext, Plaintext *p) const;
};

#endif // DECRYPTOR_H
